import RuleProvider, { EventBus } from 'diagram-js/lib/features/rules/RuleProvider'
import Rules from 'diagram-js/lib/features/rules/Rules'
// 第一步，继承 RuleProvider 创建自己的规则构造函数，并执行 init
// 这里需要注意的是，我们需要多依赖一个模块 rules, 用来保留原有的规则配置
class CustomRules extends RuleProvider {
    _rules: Rules | undefined
    constructor(eventBus: EventBus, rules: Rules) {
        super(eventBus)
        this.init()
    }
    init() {
    //  第二步，注册自己的操作拦截规则，这里配置如果选择元素不能是开始节点或者结束节点，否则禁止删除
        this.addRule(['elements.delete'], 2000, function (context) {
            const [element]: Base = context.elements
            return element.type !== 'bpmn:StartEvent' && element.type !== 'bpmn:EndEvent'
        })
    }
}
// 这里增加对 rules 模块的依赖
CustomRules.$inject = ['eventBus', 'rules']
export default CustomRules
// 第三步，在 index.ts 中导出自定义规则模块，提供给 `Modeler` 实例化时使用
// import CustomRules from './CustomRules'
// export default {
//     __init__: ['customRules'],
//     customRules: ['type', CustomRules]
// }